package com.reliable.service.serviceimpl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.reliable.api.dto.template.TemplateAnalysisRecordDTO;
import com.reliable.api.param.template.TemplateAnalysisRecordPageParam;
import com.reliable.common.annotation.DataSource;
import com.reliable.common.enums.DataSourceType;
import com.reliable.service.domain.ReliableTemplateAnalysisTask;
import com.reliable.service.mapper.ReliableTemplateAnalysisTaskMapper;
import com.reliable.service.service.IReliableTemplateAnalysisTaskService;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;

import java.time.LocalDateTime;

/**
 * 模板关联的分析任务表Service业务层实现
 */
@Service
public class ReliableTemplateAnalysisTaskServiceImpl extends ServiceImpl<ReliableTemplateAnalysisTaskMapper, ReliableTemplateAnalysisTask> implements IReliableTemplateAnalysisTaskService {
    
    @Autowired
    private ReliableTemplateAnalysisTaskMapper reliableTemplateAnalysisTaskMapper;

    /**
     * 新增模板关联的分析任务
     * @param task 分析任务对象
     * @return boolean 是否添加成功
     */
    @Override
    public boolean addTemplateAnalysisTask(ReliableTemplateAnalysisTask task) {
        return this.save(task);
    }

    /**
     * 更新分析任务状态（公共方法，支持所有状态）
     *
     * @param taskId            任务ID
     * @param status            任务状态（1-待分析，2-分析中，3-成功，4-失败，5-部分成功）
     * @param totalSessions     总会话数（可为 null）
     * @param highRiskSessions  高风险会话数（可为 null）
     * @param errorLog          错误日志（仅状态=4 或 5 时建议填写）
     */
    @Override
    @DataSource(DataSourceType.MASTER)
    public void updateAnalysisTaskStatus(
        Long taskId,
        Integer status,
        Integer totalSessions,
        Integer highRiskSessions,
        String errorLog
    ) {
        ReliableTemplateAnalysisTask task = new ReliableTemplateAnalysisTask();
        task.setId(taskId);
        task.setTaskStatus(status);
        
        // 自动设置时间戳
        if (status == 2) {
            // 分析中  设置开始时间
            task.setAnalysisStartTime(LocalDateTime.now());
        } else if (status == 3 || status == 4 || status == 5) {
            // 结束状态  设置结束时间
            task.setAnalysisEndTime(LocalDateTime.now());
        }

        // 设置统计字段（仅成功/部分成功时）
        if (totalSessions != null) {
            task.setTotalSessions(totalSessions);
        }
        if (highRiskSessions != null) {
            task.setHighRiskSessions(highRiskSessions);
        }

        // 设置错误日志（失败/部分成功）
        if (errorLog != null) {
            // TEXT 字段最大 65535 字节
            if (errorLog.length() > 65535) {
                errorLog = errorLog.substring(0, 65535);
            }
            task.setErrorLog(errorLog);
        }
        
        // 使用MyBatis Plus的updateById方法更新
        reliableTemplateAnalysisTaskMapper.updateById(task);
    }
    
    /**
     * 分页查询模板分析记录
     * @param param 查询参数
     * @return 分页结果
     */
    @Override
    public IPage<TemplateAnalysisRecordDTO> pageTemplateAnalysisRecords(TemplateAnalysisRecordPageParam param) {
        IPage<TemplateAnalysisRecordDTO> page = new Page<>(param.getPageNum(), param.getPageSize());
        return reliableTemplateAnalysisTaskMapper.selectTemplateAnalysisRecordsPage(page, param);
    }
}